package prove;

import hotel.Database;

import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.itextpdf.text.Anchor;
import com.itextpdf.text.Chapter;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Section;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

public class TestPdf {
	private static String FILE = "Test.pdf";
	 
	public static void main(String[] args) {
		try {
			   Document document = new Document();
			   PdfWriter.getInstance(document, new FileOutputStream(FILE));
			   document.open();
			   aggiungiMetaDati(document);
			   aggiungiPrefazione(document);
			   aggiungiContenuto(document);
			   document.close();
			  } catch (Exception e) {
			   e.printStackTrace();
			  }
	}

	private static void aggiungiContenuto(Document document) throws DocumentException {
		// Il secondo parametro è il numero di capitolo
		  Chapter chapter = new Chapter(new Paragraph("Primo Capitolo"), 1);
		 
		  Paragraph sectionParagraph = new Paragraph("Sezione 1");
		  Section section = chapter.addSection(sectionParagraph);
		  section.add(new Paragraph("Paragrafo 1"));
		 
		  sectionParagraph = new Paragraph("Sezione 2");
		  section = chapter.addSection(sectionParagraph);
		  section.add(new Paragraph("Paragrafo 1"));
		  section.add(new Paragraph("Paragrafo 2"));
		  section.add(new Paragraph("Paragrafo 3"));
		 
		  // Aggiungiamo una lista
		  creaLista(section);
		   
		  Paragraph paragraph = new Paragraph();
		  aggiungiLineaVuota(paragraph, 2);
		  section.add(paragraph);
		 
		  // Aggiungiamo una tabella
		  creaTabella(section);
		 
		  // Aggiunta al documento
		  document.add(chapter);
		 
		  // Prossimo capitolo
		 
		  // Il secondo parametro è il numero di capitolo
		  chapter = new Chapter(new Paragraph("Secondo Capitolo"), 2);
		 
		  sectionParagraph = new Paragraph("Sezione 1");
		  section = chapter.addSection(sectionParagraph);
		  section.add(new Paragraph("Paragrafo 1"));
		 
		  // Aggiunta al documento
		  document.add(chapter);
	}

	private static void creaTabella(Section section) {
		PdfPTable tabella = new PdfPTable(3);
		 
		  PdfPCell c1 = new PdfPCell(new Phrase("Nome"));
		  c1.setHorizontalAlignment(Element.ALIGN_CENTER);
		  c1.setGrayFill(0.8f);
		  tabella.addCell(c1);
		 
		  c1 = new PdfPCell(new Phrase("Cognome"));
		  c1.setHorizontalAlignment(Element.ALIGN_CENTER);
		  c1.setGrayFill(0.8f);
		  tabella.addCell(c1);
		 
		  c1 = new PdfPCell(new Phrase("Data di nascita"));
		  c1.setHorizontalAlignment(Element.ALIGN_CENTER);
		  c1.setGrayFill(0.8f);
		  tabella.addCell(c1);
		  tabella.setHeaderRows(1);
		 
		  riempiCelle(tabella);
		 
		  section.add(tabella);
	}

	private static void riempiCelle(PdfPTable tabella) {
		try {
			Database d=new Database();
			ResultSet rs=d.stat.executeQuery("SELECT nome,cognome,datadinascita from clienti");
			while(rs.next()){
				tabella.addCell(rs.getString(1));
				tabella.addCell(rs.getString(2));
				tabella.addCell(rs.getString(3));
			}
		} catch (SQLException | IOException e) {
			e.printStackTrace();
		}
	}

	private static void creaLista(Section section) {
		List list = new List(true, false, 10);
		  list.add(new ListItem("Punto primo"));
		  list.add(new ListItem("Punto secondo"));
		  list.add(new ListItem("Punto terzo"));
		  section.add(list);
	}

	private static void aggiungiPrefazione(Document document) throws DocumentException {
		Paragraph prefazione = new Paragraph();
		   
		  // Aggiungiamo una linea vuota
		  aggiungiLineaVuota(prefazione, 1);
		   
		  // Aggiungiamo il titolo
		  prefazione.add(new Paragraph("Titolo del documento"));
		 
		  aggiungiLineaVuota(prefazione, 1);
		   
		  // Questa linea scrive "Documento generato da: nome utente, data"
		  prefazione.add(new Paragraph("Documento generato da: " + System.getProperty("user.name")));
		   
		  aggiungiLineaVuota(prefazione, 3);
		   
		  prefazione.add(new Paragraph("Generato da iText"));
		 
		  aggiungiLineaVuota(prefazione, 3);
		   
		  prefazione.add(new Paragraph("Generato da iText"));
		 
		  aggiungiLineaVuota(prefazione, 3);
		   
		  Anchor anchor = new Anchor("Questo è un link");
		  anchor.setName("LINK");
		  anchor.setReference("http://www.lowagie.com");
		  prefazione.add(anchor);
		 
		  // Aggiunta al documento
		  document.add(prefazione);
		   
		  // Nuova pagina
		  document.newPage();
		
	}

	 private static void aggiungiLineaVuota(Paragraph paragraph, int number) {
		  for (int i = 0; i < number; i++) {
		   paragraph.add(new Paragraph(" "));
		  }
		 }

	private static void aggiungiMetaDati(Document document) {
		document.addTitle("Il mio primo PDF");
		  document.addSubject("Uso di iText");
		  document.addKeywords("Java, PDF, iText");
		  document.addAuthor("Mario Rossi");
		  document.addCreator("Luigi Bianchi");
	}

}
